#pragma once

#include <PlayFab<%- gemName %>Sdk/PlayFabError.h>
#include <PlayFab<%- gemName %>Sdk/PlayFab<%- api.name %>DataModels.h>
#include <PlayFab<%- gemName %>Sdk/PlayFabHttp.h>

namespace PlayFab<%- gemName %>Sdk
{
    class PlayFab<%- api.name %>Api
    {
    public:
<% if (hasClientOptions) { %>
        // Public, Client-Specific
        static bool IsClientLoggedIn();
        static void ForgetAllCredentials();  // #THIRD_KIND_PLAYFAB_SHUTDOWN_FIXES: - Added a logout function so that the statics can be destroyed before the system allocator.
<% } %>
        // ------------ Generated Api calls
<% for(var i in api.calls) { var apiCall = api.calls[i]; if(HasRequest(apiCall, api)) {
%>        static void <%- apiCall.name %>(<%- api.name %>Models::<%- apiCall.request %>& request, ProcessApiCallback<<%- api.name %>Models::<%- apiCall.result%>> callback = nullptr, ErrorCallback errorCallback = nullptr, void* customData = nullptr);
<% } else
{%>        static void <%- apiCall.name %>(ProcessApiCallback<<%- api.name %>Models::<%- apiCall.result%>> callback = nullptr, ErrorCallback errorCallback = nullptr, void* customData = nullptr);
<% } } %>
    private:
        // ------------ Private constructor, to enforce all-static class
        PlayFab<%- api.name %>Api();

        // ------------ Generated result handlers
<% for(var i in api.calls) { var apiCall = api.calls[i];
%>        static void On<%- apiCall.name %>Result(PlayFabRequest* request);
<% } %><% if (hasClientOptions) { %>
        // Private, Client-Specific
        static void MultiStepClientLogin(bool needsAttribution);

        // As a *slight* security improvement, this is private
        static AZStd::string mUserSessionTicket;
<% } %>    };
};
